﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//struct Stu
//{
//	char name[20];
//	int age;
//	char sex[5];
//};
//int main()
//{
//	//int a = 10000;
//	//FILE* pf = fopen("test.txt", "wb");
//	//fwrite(&a, 4, 1, pf);//⼆进制的形式写到⽂件中
//	//fclose(pf);
//	//pf = NULL;
//
//	//FILE* pf = fopen("test.txt", "w");//打开文件
//	//if(pf!=NULL)
//	//{
//	//	fputs("hello world", pf);//文件操作
//	//	fclose(pf);//关闭文件
//	//}
//
//	/*char s[20] = { 0 };
//	FILE* pf = fopen("test.txt", "r");
//	if (pf != NULL)
//	{
//		fscanf(pf, "%s", s);
//		fclose(pf);
//	}
//	printf("%s\n", s);*/
//	
//	/*struct Stu s = { "张三",20,"男" };
//	FILE* pf = fopen("text.txt", "w");
//	if (pf != NULL)
//	{
//		printf("file success\n");
//		if (fprintf(pf, "%s,%d,%s\n", s.name, s.age, s.sex) < 0)
//		{
//			printf("写入失败\n");
//		}
//		fclose(pf);
//	}*/
//	struct Stu s = { 0 };
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen error");
//		return 1;
//	}
//	fscanf(pf, "%s,%d,%s", s.name, &(s.age), s.sex);
//	//打印
//	printf("%s %d %s\n", s.name, s.age, s.sex);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//int main()
//{
//	FILE* pFile;
//	pFile = fopen("test.txt", "wb");
//	fputs("This is an apple.", pFile);
//	fseek(pFile, 9, SEEK_SET);
//	fputs(" sam", pFile);
//	fclose(pFile);
//	return 0;
//}
//int main()
//{
//	long size;
//	FILE* pFile = fopen("test.txt", "rb");
//	if (pFile == NULL)
//		perror("Error opening file");
//	else
//	{
//		fseek(pFile, 9, SEEK_SET); // non-portable
//		size = ftell(pFile);//返回文件指针相当于起始的偏移量
//		fclose(pFile);
//		printf("Size of test.txt: %ld bytes.\n", size);
//	}
//	return 0;
//}
//int main()
//{
//	int n;
//	char buffer[27];
//	FILE *pFile = fopen("test.txt", "w+");
//	for (n = 'A'; n <= 'Z'; n++)
//		fputc(n, pFile);
//	rewind(pFile);//让文件指针回到文件的起始地址
//	fread(buffer, 1, 26, pFile);
//	fclose(pFile);
//	buffer[26] = '\0';
//	printf(buffer);
//	return 0;
//}
#include <stdlib.h>
//int main(void)
//{
//	int c; // 注意：int，⾮char，要求处理EOF
//	FILE* fp = fopen("test.txt", "r");
//	if (!fp) {
//		perror("File opening failed");
//		return EXIT_FAILURE;
//	}
//	//fgetc 当读取失败的时候或者遇到⽂件结束的时候，都会返回EOF
//	while ((c = fgetc(fp)) != EOF) // 标准C I/O读取⽂件循环
//	{
//		putchar(c);
//	}
//	//判断是什么原因结束的
//	if (ferror(fp))
//		puts("I/O error when reading");
//	else if (feof(fp))
//		puts("End of file reached successfully");
//	fclose(fp);
//}
//enum { SIZE = 5 };
//int main(void)
//{
//	double a[SIZE] = { 1.,2.,3.,4.,5. };
//	FILE* fp = fopen("test.bin", "wb"); // 必须⽤⼆进制模式
//	fwrite(a, sizeof * a, SIZE, fp); // 写 double 的数组
//	fclose(fp);
//	double b[SIZE];
//	fp = fopen("test.bin", "rb");
//	size_t ret_code = fread(b, sizeof * b, SIZE, fp); // 读 double 的数组
//	if (ret_code == SIZE) {
//		puts("Array read successfully, contents: ");
//		for (int n = 0; n < SIZE; ++n)
//			printf("%f ", b[n]);
//		putchar('\n');
//	}
//	else { // error handling
//		if (feof(fp))
//			printf("Error reading test.bin: unexpected end of file\n");
//		else if (ferror(fp)) {
//			perror("Error reading test.bin");
//		}
//	}
//	fclose(fp);
//}

#include <windows.h>
//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	fputs("abcdef", pf);//先将代码放在输出缓冲区
//	printf("睡眠10秒-已经写数据了，打开test.txt⽂件，发现文件没有内容\n");
//	Sleep(10000);
//	printf("刷新缓冲区\n");
//	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（磁盘）
//	//注：fflush 在⾼版本的VS上不能使⽤了
//	printf("再睡眠10秒-此时，再次打开test.txt⽂件，文件有内容了\n");
//	Sleep(10000);
//	fclose(pf);
//	//注：fclose在关闭⽂件的时候，也会刷新缓冲区
//	pf = NULL;
//	return 0;
//}//在C语言操作文件时，需要做刷新缓冲区/关闭文件的操作

//宏定义时，能加括号就加括号
//#define SQUARE( x ) x * x
//#define SQUARE( x ) (x) * (x)
////#define DOUBLE(x) (x) + (x)
//#define DOUBLE(x) ((x) + (x))
//#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
////#undef MAX
//int main()
//{
//	/*printf("file:%s line:%d\n", __FILE__, __LINE__);*/
//	//int a = 5;
//	//printf("%d\n", SQUARE(a + 1));//11
//	//printf("%d\n", a+1*a+1);//11
//	//printf("%d", 10 * DOUBLE(a));//55
//	int x = 5;
//	int y = 8;
//	int z = MAX(x++, y++);//z = ( (x++) > (y++) ? (x++) : (y++));
//	printf("x=%d y=%d z=%d\n", x, y, z);//输出的结果是什么？//6 10 9?why??
//	//x=6,y=9 ,z=8
//}
//#undef NAME 移除一个宏定义

//#define __DEBUG__ //条件性编译
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//#ifdef __DEBUG__
//		printf("%d\n", arr[i]);//为了观察数组是否赋值成功。
//#endif //__DEBUG__
//	}
//	return 0;
//}
//************************************************************
//将data.txt文件中的数据拷贝到data_copy.txt中
int main()
{
	FILE* pr = fopen("data.txt", "r");
	FILE* pw = fopen("data_copy.txt", "w");
	if (pr == NULL)
	{
		perror("pr fopen error");
		return 1;
	}
	if (pw == NULL)
	{
		perror("pw fopen error");
		return 2;
	}
	//操作
	char str[30] = { 0 };
	fgets(str, sizeof(str) - 1, pr);
	printf("%s", str);
	fputs(str, pw);

	fclose(pr);
	fclose(pw);
	pr = NULL;
	pw = NULL;
	return 0;
}